iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0

Dialog 這個元件是一種彈性多變的對話框介面,通常用來顯示重要的資訊,它的使用方式非常靈活,可以根據不同情境進行自定義設計。常見的用途包括顯示警示性的訊息、確認性的對話框、或者是用來輸入資料的欄位等。透過這些直觀且實用的介面,Dialog 能夠有效提升使用者體驗,使得應用程式與使用者之間的互動變得更加流暢與高效。

利用簡單的範例

https://ithelp.ithome.com.tw/upload/images/20241001/20168805P5nyI2n4kC.png

製作一個的購買商品的簡易對話框

首先,還是一樣先拉介面,在(res/drawable)按右鍵New ->點Drawable
https://ithelp.ithome.com.tw/upload/images/20241001/20168805PDO41n4mcb.png
https://ithelp.ithome.com.tw/upload/images/20241001/2016880584RrZPhPgk.png
新增一個round_layout.xml檔案
https://ithelp.ithome.com.tw/upload/images/20241001/20168805665oAqIZZ6.png

同時也在(res/layout)按右鍵New ->點Layout
https://ithelp.ithome.com.tw/upload/images/20241001/20168805qkPKeiJVWv.png
https://ithelp.ithome.com.tw/upload/images/20241001/20168805fHxZifpWbw.png
新增一個dialog_item.xml檔案
https://ithelp.ithome.com.tw/upload/images/20241001/20168805NONnR9b9D0.png

在開始製作前,先說明這兩個round_layout.xml、dialog_item.xml檔案是做甚麼用的
round_layout.xml 他最主要是負責的是做對話框元件底圖
dialog_item.xml 他最主要是負責的是做對話框

開始設計的元件底圖,底圖設計完會呈現這樣
round_layout.xml

<shape
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">

        /*設定layout的圓角*/
        <corners
            android:radius="10dip"
            />

        /*設定layout框內底部的顏色*/
        <solid
            android:color="@android:color/black"
            />

        /*設定layout外框的顏色*/
        <gradient
            android:startColor="@android:color/white"
            android:endColor="@android:color/white"
            />

        <padding

            />

    </shape>

https://ithelp.ithome.com.tw/upload/images/20241001/20168805ltP7bWQZh0.png

接下來,開始設計的對話框,對話框設計完會呈現這樣
dialog_item.xml

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/round_layout">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginStart="16dp"
        android:layout_marginTop="8dp"
        android:text="購物車"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        android:textStyle="bold"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>


    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="64dp"
        android:text="哆啦A夢"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        android:textSize="18sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />


    <Button
        android:id="@+id/buttonDialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="64dp"
        android:layout_marginEnd="16dp"
        android:layout_marginBottom="8dp"
        android:background="@android:color/transparent"
        android:text="結帳"
        android:textColor="@color/design_default_color_primary"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView2"
        app:layout_constraintVertical_bias="0.0" />


</androidx.constraintlayout.widget.ConstraintLayout>

https://ithelp.ithome.com.tw/upload/images/20241001/20168805cDcBoArBjz.png

底圖、對話框設計好後,在回到activity_main.xml拉介面
activity_main.xml

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView3"
        android:layout_width="420dp"
        android:layout_height="259dp"
        android:gravity="center"
        android:text="蝦皮購物"
        android:textSize="20dp"
        android:textStyle="bold"
        app:layout_constraintBottom_toTopOf="@+id/guideline"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/guideline2" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="蝦皮購物車"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
        
</androidx.constraintlayout.widget.Cons
traintLayout>

https://ithelp.ithome.com.tw/upload/images/20241001/20168805rO98nFIQWj.png

在接上程式碼,購買商品的簡易對話框就製作完成。
MainActivity.Java

public class MainActivity extends AppCompatActivity {

    private  Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn = findViewById(R.id.button);

        btn.setOnClickListener((view -> {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);

            View diglogView = getLayoutInflater().inflate(R.layout.dialog_item,null);
            Button btnDialog = diglogView.findViewById(R.id.buttonDialog);
            builder.setView(diglogView);
            AlertDialog dialog = builder.create();

            btnDialog.setOnClickListener(view1 -> {
                dialog.dismiss();
            });

            dialog.show();


        }));
    }
}

顯示最後成品:


上一篇
# Day 22 元件介紹 SeekBar
下一篇
# Day 24 Dialog 應用4種對話框
系列文
當Java遇見Android,30天學習指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言